﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<string>
// 异常
#include<exception>
using namespace std;
//
//double Divide(int a, int b)
//{
//	try
//	{
//		// 当b == 0时抛出异常 
//		if (b == 0)
//		{
//			string s("Divide by zero condition!");
//			throw s;
//		}
//		else
//		{
//			return ((double)a / (double)b);
//		}
//	}
//	// 未抛出异常 catch 被跳过
//	// 抛出异常但是 catch 不能捕获，则直接跳转到下一层的 catch，提前退出
//	catch (int errmsg)
//	{
//		cout << errmsg << endl;
//		cout << __FUNCTION__ << ":" << __LINE__ << "行执行" << endl;
//	}
//	cout << __FUNCTION__ << ":" << __LINE__ << "行执行" << endl;
//}
//
//void Func()
//{
//	int len, time;
//	cin >> len >> time;
//	try
//	{
//		cout << Divide(len, time) << endl;
//	}
//	catch (const string& errmsg)
//	{
//		cout << errmsg << endl;
//	}
//	cout << __FUNCTION__ << ":" << __LINE__ << "行执行" << endl;
//}
//
//int main()
//{
//	while (1)
//	{
//		try
//		{
//			Func();
//		}
//		catch (const string& errmsg)
//		{
//			cout << errmsg << endl;
//			cout << __FUNCTION__ << ":" << __LINE__ << "行执行" << endl;
//		}
//		catch (...)// 可以接收所有类型的异常（兜底）
//		{
//			cout << "未知异常" << endl;
//		}
//
//	}
//
//	return 0;
//}

//// 下⾯程序模拟展⽰了聊天时发送消息，发送失败捕获异常，但是可能在 
//// 电梯地下室等场景⼿机信号不好，则需要多次尝试，如果多次尝试都发 
//// 送不出去，则就需要捕获异常再重新抛出，其次如果不是⽹络差导致的 
//// 错误，捕获后也要重新抛出。 
//void _SeedMsg(const string& s)
//{
//	if (rand() % 2 == 0)
//	{
//		throw HttpException("⽹络不稳定，发送失败", 102, "put");
//	}
//	else if (rand() % 7 == 0)
//	{
//		throw HttpException("你已经不是对象的好友，发送失败", 103, "put");
//	}
//	else
//	{
//		cout << "发送成功" << endl;
//	}
//}
//// 拦截异常，重新抛出
//void SendMsg(const string& s)
//{
//	// 发送消息失败，则再重试3次 
//	for (size_t i = 0; i < 4; i++)
//	{
//		try
//		{
//			_SeedMsg(s);
//			break;
//		}
//		catch (const Exception& e)
//		{
//			// 捕获异常，if中是102号错误，⽹络不稳定，则重新发送 
//			// 捕获异常，else中不是102号错误，则将异常重新抛出 
//			if (e.getid() == 102)
//			{
//				// 重试三次以后否失败了，则说明⽹络太差了，重新抛出异常 
//				if (i == 3)
//					throw;
//				cout << "开始第" << i + 1 << "重试" << endl;
//			}
//			else
//			{
//				throw;
//			}
//		}
//	}
//}
//int main()
//{
//	srand(time(0));
//	string str;
//	while (cin >> str)
//	{
//		try
//		{
//			SendMsg(str);
//		}
//		catch (const Exception& e)
//		{
//			cout << e.what() << endl << endl;
//		}
//		catch (...)
//		{
//			cout << "Unkown Exception" << endl;
//		}
//	}
//	return 0;
//}

